﻿using Pe.Petecos.Comercial.Cross.Core.Constantes;
using Pe.Petecos.Comercial.Infraestructura.Core.Contract.Ventas;
using Pe.Petecos.Comercial.Infraestructura.Model.Ventas;
using Pe.Petecos.Comercial.Infraestructura.Repository.Base;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pe.Petecos.Comercial.Infraestructura.Repository.Implements.Ventas
{
    public class GastoPersonalProyectoRepository : QueryRepository, IGastoPersonalProyectoRepository
    {
        public List<GastoPersonalProyectoLogic> Buscar(int codigoGastoPersonalProyecto = 0, int codigoProyecto = 0, string codigoEstado = "", string nombreProyecto = "", DateTime? fechaInicio = null, DateTime? fechaFin = null, string codigoTipo = "")
        {
            SqlParameter[] parametros = new SqlParameter[]
            {
                new SqlParameter("CODIGO_GASTO_PERSONAL_PROYECTO", SqlDbType.Int) { Value = (object)codigoGastoPersonalProyecto ?? DBNull.Value },
                new SqlParameter("CODIGO_PROYECTO", SqlDbType.Int) { Value = (object)codigoProyecto ?? DBNull.Value },
                new SqlParameter("NOMBRE_PROYECTO", SqlDbType.VarChar) { Value = (object)nombreProyecto ?? DBNull.Value },
                new SqlParameter("CODIGO_ESTADO_GASTO_PERSONAL_PROYECTO", SqlDbType.VarChar) { Value = (object)codigoEstado ?? DBNull.Value },
                new SqlParameter("CODIGO_TIPO_GASTO_PERSONAL_PROYECTO", SqlDbType.VarChar) { Value = (object)codigoTipo ?? DBNull.Value },
                new SqlParameter("FECHA_INICIO", SqlDbType.DateTime) { Value = (object)fechaInicio ?? DBNull.Value },
                new SqlParameter("FECHA_FIN", SqlDbType.DateTime) { Value = (object)fechaFin ?? DBNull.Value }
            };
            return this.dataBaseProvider.ExecuteStoreProcedure<GastoPersonalProyectoLogic>("VTA.USP_GASTO_PERSONAL_PROYECTO_SEL", parametros).ToList();
        }

        public int Insertar(GastoPersonalProyectoEntity gastoPersonalProyectado)
        {
            SqlParameter[] parametros = new SqlParameter[]
            {
               new SqlParameter("CODIGO_PROYECTO", SqlDbType.Int) { Value = (object)gastoPersonalProyectado.CodigoProyecto ?? DBNull.Value },
               new SqlParameter("NOMBRE_PROYECTO", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.NombreProyecto ?? DBNull.Value },
               new SqlParameter("TIPO_GASTO", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.TipoGasto ?? DBNull.Value },
               new SqlParameter("MONTO_GASTO", SqlDbType.Decimal) { Value = (object)gastoPersonalProyectado.MontoGasto ?? DBNull.Value },
               new SqlParameter("FECHA_GASTO", SqlDbType.DateTime) { Value = (object)gastoPersonalProyectado.FechaGasto ?? DBNull.Value },
               new SqlParameter("OBSERVACIONES", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.Observaciones ?? DBNull.Value },
               new SqlParameter("CODIGO_ESTADO", SqlDbType.VarChar){ Value = DatosConstantes.EstadoGastoPersonalProyecto.Registrado },
               new SqlParameter("USUARIO_CREACION", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.UsuarioCreacion ?? DBNull.Value },
               
             };
            //return this.dataBaseProvider.ExecuteStoreProcedureScalar<int>("VTA.USP_GASTO_PERSONAL_PROYECTO_INS", parametros);
            return this.dataBaseProvider.ExecuteStoreProcedureNonQuery("VTA.USP_GASTO_PERSONAL_PROYECTO_INS", parametros);
        }

        public int Modificar(GastoPersonalProyectoEntity gastoPersonalProyectado)
        {
            SqlParameter[] parametros = new SqlParameter[]
            {
               new SqlParameter("CODIGO_GASTO_PERSONAL", SqlDbType.Int) { Value = (object)gastoPersonalProyectado.CodigoGastoPersonal ?? DBNull.Value },
               new SqlParameter("CODIGO_PROYECTO", SqlDbType.Int) { Value = (object)gastoPersonalProyectado.CodigoProyecto ?? DBNull.Value },
               new SqlParameter("NOMBRE_PROYECTO", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.NombreProyecto ?? DBNull.Value },
               new SqlParameter("TIPO_GASTO", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.TipoGasto ?? DBNull.Value },
               new SqlParameter("MONTO_GASTO", SqlDbType.Decimal) { Value = (object)gastoPersonalProyectado.MontoGasto ?? DBNull.Value },
               new SqlParameter("FECHA_GASTO", SqlDbType.DateTime) { Value = (object)gastoPersonalProyectado.FechaGasto ?? DBNull.Value },
               new SqlParameter("OBSERVACIONES", SqlDbType.VarChar) { Value = (object)gastoPersonalProyectado.Observaciones ?? DBNull.Value },
               new SqlParameter("CODIGO_ESTADO", SqlDbType.VarChar){ Value = DatosConstantes.EstadoGastoPersonalProyecto.Registrado },
               new SqlParameter("USUARIO_MODIFICACION", SqlDbType.Int) { Value = (object)gastoPersonalProyectado.UsuarioModificacion ?? DBNull.Value },
               
             };
            return this.dataBaseProvider.ExecuteStoreProcedureScalar<int>("VTA.USP_GASTO_PERSONAL_PROYECTO_UDP", parametros);
        }

        public int ModificarEstado(List<int> codigos, string codigoEstado, string usuario)
        {
            var lista = codigos.Select(x => new
            {
                CODIGO = x
            }).ToList();

            SqlParameter[] parametros = new SqlParameter[]
            {
                
                new SqlParameter("LISTA_CODIGO", SqlDbType.Structured) { Value = lista.ToDataTable(), TypeName = "GRL.TYPE_LISTA_CODIGO" },
                new SqlParameter("CODIGO_ESTADO", SqlDbType.VarChar){ Value = (object)codigoEstado ?? DBNull.Value },
                new SqlParameter("USUARIO_MODIFICACION", SqlDbType.VarChar){ Value = (object)usuario ?? DBNull.Value }
            };
            return this.dataBaseProvider.ExecuteStoreProcedureNonQuery("VTA.USP_GASTO_PERSONAL_PROYECTO_ESTADO_UDP", parametros);
        }
    }
}
